package gov.pr.celepar.sentinela.admin.action.restricao;

import gov.pr.celepar.sentinela.Constants;
import gov.pr.celepar.sentinela.admin.action.BaseAction;
import gov.pr.celepar.sentinela.admin.dao.RestricaoHorarioDAO;
import gov.pr.celepar.sentinela.admin.dao.SistemaDAO;
import gov.pr.celepar.sentinela.admin.dao.factory.DAOFactoryServer;
import gov.pr.celepar.sentinela.admin.excecao.SentinelaServerException;
import gov.pr.celepar.sentinela.admin.form.restricao.RestricaoFuncaoForm;
import gov.pr.celepar.sentinela.admin.pojo.RestricaoGeral;
import gov.pr.celepar.framework.util.Pagina;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class PesquisaRestricaoFuncaoAction extends BaseAction {

	public String executar(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		this.forward = "lista_restringirFuncao";
		try {
			DAOFactoryServer daof = DAOFactoryServer.getDAOFactory();
			RestricaoHorarioDAO br = daof.getRestricaoDAO();

			RestricaoFuncaoForm restricaoForm = (RestricaoFuncaoForm) form;

			Integer indicePagina = new Integer(
					restricaoForm.getIndice() == null ? "1" : restricaoForm
							.getIndice());
			Integer totalRegistros = null;

			Long codGrupos[] = null;
			if (!this.comunicacao.isRoot()) {
				long grupos[] = this.comunicacao.getIdGrupos();
				if (grupos != null) {
					codGrupos = new Long[grupos.length];
					for (int i = 0; i < grupos.length; i++)
						codGrupos[i] = Long.valueOf(grupos[i]);
				}
			}
			if (restricaoForm.getTotalRegistros() != null) {
				totalRegistros = new Integer(restricaoForm.getTotalRegistros());
			} else {
				long total = 0;
				if (this.comunicacao.isRoot()) {
					total = br.contarRestricoesFuncao();
				} else {
					total = br.contarRestricoesFuncaoByGrupos(codGrupos);
				}
				totalRegistros = new Integer((int) total);
				indicePagina = new Integer("1");
			}

			Collection<RestricaoGeral> dados = null;
			if (this.comunicacao.isRoot()) {
				dados = br.listarRestricoesFuncao(indicePagina.intValue());
			} else {
				dados = br.listarRestricoesFuncaoByGrupos(indicePagina,
						codGrupos);
			}

			if (dados != null && !dados.isEmpty()) {
				SistemaDAO bs = daof.getSistemaDAO();
				Iterator i = dados.iterator();
				while (i != null && i.hasNext()) {
					RestricaoGeral rg = (RestricaoGeral) i.next();
					rg
							.setSistema(bs.consultar(rg.getSistema()
									.getCodSistema()));
				}

				Pagina pagina = new Pagina(Constants.QUANTIDADE_REGISTROS_GRID,
						indicePagina, totalRegistros);
				pagina.setRegistros(dados);
				request.setAttribute("pagina", pagina);
			} else {
				throw new SentinelaServerException(
						"Nenhum registro encontrado! ");
			}
		} catch (SentinelaServerException appEx) {
			throw appEx;
		} catch (Exception e) {
			throw e;
		}
		return "lista_restringirFuncao";
	}
}
